/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ejb.common;

import applicationexcepcion.ClienteCodiceFiscaleNullException;
import applicationexcepcion.ClienteNonValidoException;
import applicationexcepcion.ClienteNullException;
import applicationexcepcion.PersonaRegistrataException;
import common.Stato;
import entity.Cliente;
import facade.ClienteFacade;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;

/**
 *
 * @author Antonio
 */
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public class ClienteManager implements ClienteManagerLocal {

    @EJB
    private PersonaManagerLocal personaManager;
    @EJB
    private ClienteFacade clienteFacade;

    @Override
    public void attivaCliente(Cliente c) {

        if (c == null) {
            return;
        }
        if (c.getAccount().getStato().equals(Stato.Attivo) || c.getAccount().getStato().equals(Stato.Bannato)) {
            return;
        }

        c.getAccount().setStato(Stato.Attivo);
    }// attivaCliente

    @Override
    public void bloccaCliente(Cliente c) {

        if (c == null) {
            return;
        }
        if (c.getAccount().getStato().equals(Stato.Bloccato) || c.getAccount().getStato().equals(Stato.Bannato)) {
            return;
        }

        c.getAccount().setStato(Stato.Bloccato);
    }// bloccaCliente

    @Override
    public void bannaCliente(Cliente c) {

        if (c == null) {
            return;
        }
        if (c.getAccount().getStato().equals(Stato.Bannato)) {
            return;
        }

        c.getAccount().setStato(Stato.Bannato);

    }// bannaCliente

    @Override
    public Cliente cercaClientePerId(Long id) {

        if (id == null) {
            return null;
        }
        return clienteFacade.find(id);
    }// cercaClientePerId

    @Override
    public void creaCliente(Cliente c) throws PersonaRegistrataException, ClienteNullException,
            ClienteCodiceFiscaleNullException, ClienteNonValidoException {
        if (c == null) {
            throw new ClienteNullException();
        }
        if (c.getCodiceFiscale() == null) {
            throw new ClienteCodiceFiscaleNullException();
        }
        if (personaManager.isPersonaRegistrata(c.getCodiceFiscale())) {
            throw new PersonaRegistrataException();
        }
        if (c.getNome() == null || c.getCognome() == null || c.getCodiceFiscale().length() < 16 || c.getAccount() == null) {
            throw new ClienteNonValidoException();
        }
        clienteFacade.create(c);
    }
}
